module cpsr(
  input         clk,
  input         rst,
  input         i_nzcv_we,
  input   [3:0] i_nzcv_d,
  input   [2:0] i_aif_we,
  input   [2:0] i_aif_d,
  input         i_mode_we,
  input   [4:0] i_mode_d,
  output  [3:0] o_nzcv_q,
  output  [2:0] o_aif_q,
  output  [4:0] o_mode_q
);

reg o_nzcv_q;
reg o_aif_q;
reg o_mode_q;

//assign o_q = {o_nzcv_q,19'b0,o_aif_q,1'b0,o_mode_q};

always @(posedge clk) begin 
  if (rst) begin
    /* Disable IRQ, FIQ, Imprecise Aborts */
    o_aif_q  <= 3'b111;
    o_mode_q <= 5'b10011; // svc
  end else begin
    if (i_nzcv_we) o_nzcv_q <= i_nzcv_d;
    if (i_aif_we[2]) o_aif_q[2] <= i_aif_d[2];
    if (i_aif_we[1]) o_aif_q[1] <= i_aif_d[1];
    if (i_aif_we[0]) o_aif_q[0] <= i_aif_d[0];
    if (i_mode_we) o_mode_q <= i_mode_d;
  end
end

endmodule
